package cn.itcast.mp.mapper;

import cn.itcast.mp.pojo.User;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jdk.nashorn.internal.ir.CallNode;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelect() {
        System.out.println(("----- selectAll method test ------"));
        // 使用BaseMapper提供的selectList方法
        List<User> userList = userMapper.selectList(null);
        Assert.assertEquals(5, userList.size());
        userList.forEach(System.out::println);
    }
//增加
    @Test
    public void testInsert(){
        User user = new User();
        user.setId(6L);
        user.setName("Amy");
        user.setAge(16);
        user.setEmail("amy@itcast.cn");
        userMapper.insert(user);
    }

//    删除
//    wrapper条件删除
    @Test
    public void testDelete(){
        int count = userMapper.delete(new QueryWrapper<User>().eq("name", "Amy"));
        System.out.println("count = " + count);
    }
    // columnMap 条件删除
    @Test
    public void testDelete1(){
//        key是字段名  vlaue 是字段值
        Map<String, Object> map = new HashMap<>();
        map.put("id","6");
        userMapper.deleteByMap(map);
    }
//deleteBatchIds删除
    @Test
    public void testDeleteByIds(){
        List<Long>ids = new ArrayList<>();
        ids.add(6L);
        ids.add(7L);
        userMapper.deleteBatchIds(ids);
    }
//      修改
// 根据id 更新修改
    @Test
    public void updateById(){
        User user = new User();
//        需要修改的id
        user.setId(6L);
        //需要修改的数据
        user.setName("erping");
        user.setAge(23);
        user.setEmail("1720696548@qq.com");
        userMapper.updateById(user);
    }
// 使用 updateWrapper 条件修改(两种方式)
    @Test
    public void update(){
//        方式一
//        更新修改字段
        User user = new User();
        user.setEmail("2605622049@qq.com");
        // 更新添加,未设置条件 sql： UPDATE user SET email=?  ，
        // 设置后：UPDATE user SET email=? WHERE (id = ?)
        UpdateWrapper<User> wrapper1 = new UpdateWrapper<User>();
        wrapper1.eq("id",6);
        userMapper.update(user,wrapper1);
    }
//    方式二

    @Test
    public void update2(){
        	UpdateWrapper<User> wrapper2 = new UpdateWrapper<User>();
 	wrapper2.set("email","666666@qq.com")   // 更新的内容，可往后 .set连接
         	.eq("id",6);                    // 更新的条件，可往后 .eq 添加
  	userMapper.update(null,wrapper2);
    }

//    查找

//    id查询
    @Test
    public void selectById(){
        User user = userMapper.selectById(1L);
        System.out.println("user = " + user);
    }

//    ids批量查询
    @Test
    public void selectByIds(){
        List<Long> ids = new ArrayList<>();
        ids.add(1L);
        ids.add(2L);
        List<User> users = userMapper.selectBatchIds(ids);
        System.out.println("users = " + users.toString());
    }
//  查询全部
    @Test
    public void selectAll(){
        List<User> users = userMapper.selectList(null);
        System.out.println(users.toString());
    }
//    条件查询  queryWrapper（无条件则查询全部）
    @Test
    public void selectListWrapper(){
//        QueryWrapper<User> wrapper = new QueryWrapper<>();
//        wrapper.eq("id",1);
//        List<User> users = userMapper.selectList(wrapper);
//        System.out.println(users.toString());

        List<User> id = userMapper.selectList(new QueryWrapper<User>().eq("id", 1));
        System.out.println("id = " + id.toString());
    }

//    分页查询    ？？？？？
    @Test
    public void selectPage() {
        // 分页条件
        Page<User> page = new Page<>();
        // 当前页
        page.setCurrent(1);
        // 每页大小
        page.setSize(3);
        // 分页查询，结果会放到Page<User>中，因此无需返回
        userMapper.selectPage(page, null);

        // 总条数
        long total = page.getTotal();
        System.out.println("total = " + total);
        // 总页数
        long pages = page.getPages();
        System.out.println("pages = " + pages);
        // 当前页结果
        List<User> list = page.getRecords();
        list.forEach(System.out::println);
    }


}
